# Querying

You can use the `kioskClient` to query kiosk data. It helps you get owned kiosks for an address, as
well as fetching all the contents of a specified kiosk.

## Querying owned kiosks

Querying owned kiosks returns a list of `kioskOwnerCaps`, as well as a list of the `kioskIds`.

`KioskOwnerCap` is important in this case, as it is used for managing an owned kiosk, as well as
purchasing.

```typescript
const kioskClient = new KioskClient({...});
const address = '0xAddress'
// You can perform actions, like querying the owned kiosks for an address.
const { kioskOwnerCaps, kioskIds } = await kioskClient.getOwnedKiosks({ address });
console.log(kioskOwnerCaps);

/**
 * An example response for an address that owns two kiosks (one of which is personal)
[
  {
    isPersonal: true,
    digest: '9mstxLa87E3VEewQ62EEQDKb7ZH2irrEXeMetQjQHzXz',
    version: '18',
    objectId: '0x5d4df1b8da5e1b6bafbb4b7dc5c73e532324d82c86e331f71bf1ea5dff18dccc',
    kioskId: '0x8453fc71611ce8ff73efcca42ed241dcaf7dc65411b56a7be42e6a0bc3d72c13'
  },
  {
    isPersonal: false,
    digest: '8fsKgCh5c2ycPKMVUqUz2H6D9WkPjRHmGP454z67afJh',
    version: '15',
    objectId: '0x84f5a9a1379d73eceae03d0578637936e208daa809e04ec07a8085c798a980fd',
    kioskId: '0xf8c826aae52bc576768032ce496b7fc349f9003603ed1541c8033fc5c2dd2d2c'
  }
]
 */
```

## Querying kiosk content

You can follow the sample to query a kiosk's contents. We recommend saving the `items` structure
(`KioskItem`), as it's useful when you're trying to purchase from one.

`listing` field only applies on items that are listed for sale.

```typescript
const kioskClient = new KioskClient({...});

const id = `0xKioskId`;

// You can perform actions, like querying the owned kiosks for an address.
const res = await kioskClient.getKiosk({
    id,
    options: {
        withKioskFields: true, // this flag also returns the `kiosk` object in the response, which includes the base setup
        withListingPrices: true, // This flag enables / disables the fetching of the listing prices.
    }
});
console.log(res);
/**
 * An example response of an existing kiosk
 *
{
  items: [
    {
      objectId: '0xf65e88a33466763cabd11b7c2a57938cf4fa707c6cf767cb428894e14caf1537',
      type: '0xd12f8e0fdae3f5d88d2fc4af2e869ea503491e2d8da5f3136320b65bdcf70ab3::hero::Hero',
      isLocked: false,
      kioskId: '0x6d45df1942c11048a9182e3f732262e6e3c95ddd2e5f338c565f531717c2617f',
      listing: undefined,
      data: {
        objectId: '0xf65e88a33466763cabd11b7c2a57938cf4fa707c6cf767cb428894e14caf1537',
        version: '18',
        digest: 'As9fkLEP4QVChhYuGemB185xyyzWG4hspSa3UZ6TWR8b',
        display: { data: null, error: null },
        content: {
          dataType: 'moveObject',
          type: '0xd12f8e0fdae3f5d88d2fc4af2e869ea503491e2d8da5f3136320b65bdcf70ab3::hero::Hero',
          hasPublicTransfer: true,
          fields: {
            id: {
              id: '0xf65e88a33466763cabd11b7c2a57938cf4fa707c6cf767cb428894e14caf1537'
            },
            level: 3
          }
        }
      }
    },
    {
      objectId: '0x34def97cb8c357fcfdf22f72421d4f6f01706662acf7be1afb6e7391d5491372',
      type: '0xd12f8e0fdae3f5d88d2fc4af2e869ea503491e2d8da5f3136320b65bdcf70ab3::hero::Hero',
      isLocked: true,
      kioskId: '0x6d45df1942c11048a9182e3f732262e6e3c95ddd2e5f338c565f531717c2617f',
      listing: undefined,
      data: {
        objectId: '0x34def97cb8c357fcfdf22f72421d4f6f01706662acf7be1afb6e7391d5491372',
        version: '15',
        digest: 'J1MdmHUCXJEKd86rkmMwWASMV86wGkVS9P6SFPyRaKVV',
        display: { data: null, error: null },
        content: {
          dataType: 'moveObject',
          type: '0xd12f8e0fdae3f5d88d2fc4af2e869ea503491e2d8da5f3136320b65bdcf70ab3::hero::Hero',
          hasPublicTransfer: true,
          fields: {
            id: {
              id: '0x34def97cb8c357fcfdf22f72421d4f6f01706662acf7be1afb6e7391d5491372'
            },
            level: 1
          }
        }
      }
    }
  ],
  itemIds: [
    '0xf65e88a33466763cabd11b7c2a57938cf4fa707c6cf767cb428894e14caf1537',
    '0x34def97cb8c357fcfdf22f72421d4f6f01706662acf7be1afb6e7391d5491372'
  ],
  listingIds: [],
  extensions: [],
  kiosk: {
    id: '6d45df1942c11048a9182e3f732262e6e3c95ddd2e5f338c565f531717c2617f',
    profits: '100000',
    owner: '96300f8d9064f954f99db2d7fbe2ad0c5e4344f0e22392330285d399498cfaf3',
    itemCount: 2,
    allowExtensions: false
  }
}
 */
```

## Query kiosk extension

Queries an extension's data. Returns `null` if there's no extension with that type installed.

```typescript
// Assuming we have a kioskClient instance.
const kioskClient = new KioskClient({...});

// The type of the custom extension.
const type = '0xAddress::custom_extension::ACustomExtensionType';

const extension = await kioskClient.getKioskExtension({
  kioskId: '0xAKioskId',
  type
});

console.log(extension);

/**
 * An example output of the response
{
  objectId: 'extensionObjectId',
  type: '0xAddress::custom_extension::ACustomExtensionType',
  isEnabled: true,
  permissions: "3",
  storageId: '0xExampleStorageId',
  storageSize: "0",
}
*/
```

## Querying transfer policy for type

```typescript
const kioskClient = new KioskClient({...});

const itemType = '0xAddress::hero::Hero';
// You can perform actions, like querying the owned kiosks for an address.
const policies = await kioskClient.getTransferPolicies(itemType)
console.log(policies);

/* An example output of the response
[
  {
    id: '0x074847055fe4ea9a7f51eeaf095c05875509403059115af121cfea9b8de355de',
    type: '0x2::transfer_policy::TransferPolicy<0x85926b03d56e49bedfca558fc6a2540d43bdfb5c218190d63b571f33afe255f8::hero::Hero>',
    owner: { Shared: { initial_shared_version: 5 } },
    rules: [
      'a82212d931d3bc7c3401552d935abced7b7fd41d4f57a99f0f47b9196b2f57f5::kiosk_lock_rule::Rule',
      'a82212d931d3bc7c3401552d935abced7b7fd41d4f57a99f0f47b9196b2f57f5::floor_price_rule::Rule',
      'a82212d931d3bc7c3401552d935abced7b7fd41d4f57a99f0f47b9196b2f57f5::royalty_rule::Rule',
      'a82212d931d3bc7c3401552d935abced7b7fd41d4f57a99f0f47b9196b2f57f5::personal_kiosk_rule::Rule'
    ],
    balance: '20000'
  }
]
*/
```

## Get owned transfer policies

Queries to find all the owned transfer policies. Useful to manage transfer policies, and can be
combined with `TransferPolicyTransaction` to easily add or remove rules and withdraw profits.

```typescript
// Assuming we have a kioskClient instance.
const kioskClient = new KioskClient({...});

// The address that owns the transfer policies.
const address = '0xAddress';
// You can perform actions, like querying the owned kiosks for an address.
const policies = await kioskClient.getOwnedTransferPolicies({ address });
console.log(policies);

/**
 * An example output of the response
[
  {
    policyId: '0x6b6eca8df6e70ea6447e639ef26b519039b5e9123642258eea1b3c781e94faca',
    policyCapId: '0x34a4794d4ad6578ac345d23ca0f7a4632ca88de297daaf24a1cdbc91e1547be4',
    type: '0xbe01d0594bedbce45c0e08c7374b03bf822e9b73cd7d555bf39c39bbf09d23a9::hero::Hero'
  },
  {
    policyId: '0x87ac2dd80011ed2de9c7916a19145ff520959acd3d8c3dbd100aa74b34155a0a',
    policyCapId: '0x858edda13c5c9086b2491eafed39e0ea58511268bb90d90464a2d7b5ed3f3880',
    type: '0xbe01d0594bedbce45c0e08c7374b03bf822e9b73cd7d555bf39c39bbf09d23a9::hero::Villain'
  }
]
*/
```

## Get owned transfer policies by type

Queries to find all the owned transfer policies for a specific type. Useful to manage transfer
policies, and can be combined with

```typescript
// Assuming you have a kioskClient instance.
const kioskClient = new KioskClient({...});

// The address that owns the transfer policies.
const address = '0xAddress';
// The type of the transfer policy.
const type = '0xbe01d0594bedbce45c0e08c7374b03bf822e9b73cd7d555bf39c39bbf09d23a9::hero::Hero';

// We can query by type.
const policies = await kioskClient.getOwnedTransferPoliciesByType({ address, type });

// An example output of the response
// [
//   {
//     policyId: '0x6b6eca8df6e70ea6447e639ef26b519039b5e9123642258eea1b3c781e94faca',
//     policyCapId: '0x34a4794d4ad6578ac345d23ca0f7a4632ca88de297daaf24a1cdbc91e1547be4',
//     type: '0xbe01d0594bedbce45c0e08c7374b03bf822e9b73cd7d555bf39c39bbf09d23a9::hero::Hero'
//   }
// ]
```
